﻿using EGuayas.Web.Auditoria.admin;
using EGuayas.Web.Resources;
using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EGuayas.Web.Auditoria
{
    public partial class wucCorreguirDoc : ucWuc
    {
        #region Campos
        protected String IdPageSession
        {
            get
            {

                return ReadCustomConfigPage(this.pnlDocCoc, this.ID);
            }

        }
        protected String CodeFase
        {
            get
            {
                return  this.ReadCustomConfigCodeFase(this.pnlDocCoc, this.ID);
               
            }

        }
        public String ExpedienteAuditoriaId
        {
            get
            {
                return ReadCustomConfigExpedienteAuditoria(this.pnlDocCoc, this.ID);
            }
        }
        protected String ModuloSession
        {
            get
            {

                return ReadCustomConfig(this.pnlDocCoc, this.ID, "_aud");
            }

        }


        /// <summary>
        /// Obtener fase id seteada en evento <OnComponentAdded> del user control
        /// </summary>
        protected String ValorFaseOrAuditoriaId
        {
            get
            {

                return (this.ModuloSession == Valores.Modulo_Archivo_Aud_Cump) ? GetSessionPage.GetSession(ReadCustomConfigFaseAuditoria(this.pnlDocCoc, this.ID)) : ReadCustomConfigAuditoriaId(this.pnlDocCoc, this.ID);
                
            }

        }
       
        public String ExpedienteId 
        {
            get 
            {
                return ReadCustomConfig(this.pnlDocCoc, this.ID, "_AexpId");
            }
        }
        #endregion
        
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string sIndicaciones = "";
                if (X.IsAjaxRequest)
                {
                    //Path="~/Auditoria/admin/wucOtros.ascx" OnComponentAdded="OnOtsAdded" 
                    //UserControlRendererConfig ucl = new UserControlRendererConfig{
                    //    UserControlPath = "~/Auditoria/admin/wucOtros.ascx",
                    //    SingleControl = true,
                    //    Mode = RenderMode.AddTo,
                    //    Element = "TabWucCorrg"
                    
                    //};
                    //ucl.BeforeRender += delegate(ComponentAddedEventArgs e1)
                    //{
                    //    Ext.Net.Panel panel = (Ext.Net.Panel)e1.Control;

                    //    SetCustomConfigWucAllAud(panel, Fase, ModuloSession, IdPageSession, ValorFaseOrAuditoriaId, ExpedienteId, ExpedienteAuditoriaId);

                       
                    //};
                    //UserControlRenderer.Render(ucl);
                
                    this.hddRolCode.SetValue(GetSessionUsuario.UsuarioRolCodigo);
                    switch(GetSessionUsuario.UsuarioRolCodigo)
                    {
                        case Valores.Codigo_Rol_JefeDepartamentalAuditoria:
                            {   
                                this.gpDocRevizar.SetTitle(Titulos.TituloRevizarAuditor);
                                this.btnNotificarRegulado.Show();
                                this.btnNotificarTecn.Show();
                                break;
                            }
                        case Valores.Codigo_Rol_TecnicoAuditoria:
                            {     
                                this.gpDocRevizar.SetTitle(Titulos.TituloRevizarTecnico);
                                this.btnNotificarRegulado.Hide();
                                this.btnNotificarTecn.Hide();
                              
                                //Asignar valor del estado a cada auditoria
                                switch (ModuloSession)
                                {

                                    case Valores.Modulo_Archivo_Aud_Cump:
                                        FaseAuditoria objFaseAud = FaseAuditoria.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                                        if (objFaseAud.EstadoFase == Valores.Codigo_Estado_Fase_Reingreso && objFaseAud.Indicaciones!="")
                                        {
                                            sIndicaciones = objFaseAud.Indicaciones;  
                                        }
                                      
                                        break;

                                    case Valores.Modulo_Archivo_Aud_Moni:
                                        AuditoriaMonitoreo monitoreo = AuditoriaMonitoreo.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                                        if (monitoreo.EstadoFase == Valores.Codigo_Estado_Fase_Reingreso && monitoreo.Indicaciones != "")
                                        {
                                            sIndicaciones = monitoreo.Indicaciones; 
                                        }
                                        break;
                                    case Valores.Modulo_Archivo_Aud_Pma:
                                        AuditoriaPMA pmaAud = AuditoriaPMA.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                                        if (pmaAud.EstadoFase == Valores.Codigo_Estado_Fase_Reingreso && pmaAud.Indicaciones != "")
                                        {
                                            sIndicaciones = pmaAud.Indicaciones; 
                                        }
                                        break;
                                    case Valores.Modulo_Archivo_Aud_Otros:
                                        AuditoriaOtros otrosaud = AuditoriaOtros.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                                        if (otrosaud.EstadoFase == Valores.Codigo_Estado_Fase_Reingreso && otrosaud.Indicaciones != "")
                                        {
                                            sIndicaciones = otrosaud.Indicaciones; 
                                        }
                                        break;
                                }
                                if (sIndicaciones != "")
                                {
                                    StringBuilder sb = new StringBuilder();
                                  
                                    sb.Append("<div id='errorPageContainer'>");
                                    sb.Append("<div id='errorLongContent'>");
                                    sb.Append("<div id='errorShortDesc'>");
                                    sb.Append("<div id='errorShortDescText'><p>" + sIndicaciones + "</p></div>");
                                    sb.Append("</div>");
                                    sb.Append("</div>");
                                    sb.Append("</div>");
                                 

                                    this.winIndicaciones.Html = sb.ToString();
                                    this.winIndicaciones.Show();

                                 
                                }


                                break;
                        }
                        default:
                        {
                            this.gpDocRevizar.SetTitle(Titulos.TituloRevizarAuditor);
                            this.btnNotificarRegulado.Hide();
                            this.btnNotificarTecn.Hide();
                                
                            break;
                        }

                    }
                 

                }
                if (sIndicaciones == "")
                {
                    GridPanel myGrid = this.gpDocumentos;
                    myGrid.GetStore().AutoLoadParams.Add(new Ext.Net.Parameter("query", ValorFaseOrAuditoriaId));
                    myGrid.GetStore().AutoLoadParams.Add(new Ext.Net.Parameter("table", ModuloSession));
                    myGrid = this.gpDocRevizar;
                    myGrid.GetStore().AutoLoadParams.Add(new Ext.Net.Parameter("query", ValorFaseOrAuditoriaId));
                    myGrid.GetStore().AutoLoadParams.Add(new Ext.Net.Parameter("table", ModuloSession));
                  
                }
            }
            catch (Exception ex)
            {
                RegistrarLog("wucCorreguirDoc.Page_Load" + ex);
            }
        }
        [DirectMethod(IDAlias = "WucCorregDocAud")]
        public DocumentoAuditoriaLista BindDataArchivosRevTec(string action, Dictionary<string, object> extraParams)
        {
            try
            {
                string queryPrm = extraParams["query"].ToString();
                string tablePrm = extraParams["table"].ToString();
                DocumentoCriteria filter = DocumentoCriteria.NewDocumentoCriteria();              
                filter.ModuloId = queryPrm;
                filter.Modulo = tablePrm;
                filter.Procesado = Valores.Codigo_CHAR_No;
                DocumentoAuditoriaLista listaRta =DocumentoAuditoriaLista.GetDocumentoAuditoriaLista(filter);
                if (listaRta.Count == 0)
                {
                    btnNotificarTecn.Disable();
                    btnNotificarRegulado.Disable();
                }
                else
                {
                    btnNotificarTecn.Enable();
                    btnNotificarRegulado.Enable();
                }
                return listaRta;
            
            }
            catch (Exception ex)
            {
                RegistrarLog("wucCorreguirDoc.BindDataArchivos" + ex);
            }
            return null;
        }
        [DirectMethod (IDAlias = "WucCorregDocAud")]
        public ArchivoLista BindDataArchivos(string action, Dictionary<string, object> extraParams)
        {
            try
            {
                string queryPrm = extraParams["query"].ToString();
                string tablePrm = extraParams["table"].ToString();
                ArchivoGlobalCriteria filter = ArchivoGlobalCriteria.NewArchivoGlobalCriteria();
                filter.ExpedienteId = ExpedienteId;
                filter.FaseId       = queryPrm;
                filter.Tabla        = tablePrm;
                return ArchivoLista.GetArchivoLista(filter);
            }
            catch (Exception ex)
            {
                RegistrarLog("wucCorreguirDoc.BindDataArchivos" + ex);
            }
            return null;           
        }
      
        protected void btnComentario_Click(object sender, DirectEventArgs e)
        {
            try
            {
                Guid id = Guid.Parse(e.ExtraParams["Id"]);
                Archivo objArch = Archivo.GetEditableRoot(id, ModuloSession);
               
                if (e.ExtraParams["Revizar"] == Valores.Codigo_CHAR_Si)
                {
                    DocumentoTecnico objDoc = DocumentoTecnico.NewEditableRoot();
                    objDoc.Id = Guid.NewGuid();
                    objDoc.TecnicoRevisor = GetSessionUsuario.UsuarioRolNombre;
                    objDoc.Modulo = ModuloSession;
                    objDoc.IdModulo = ValorFaseOrAuditoriaId;
                    objDoc.Comentario = e.ExtraParams["Comentarios"];
                    objDoc.ArchivoId = objArch.Id.ToString();
                    objDoc.Estado = Valores.Codigo_CHAR_Si;
                    objDoc.Save();
                    objArch.SubirNuevo = Valores.Codigo_CHAR_Revizar;
                    objArch.Save();
                  
                }
                else
                {
                    objArch.SubirNuevo = e.ExtraParams["Revizar"];
                    objArch.Comentarios = e.ExtraParams["Comentarios"];
                    objArch.Save();                    
                }
                gpDocumentos.GetStore().Reload();
                gpDocRevizar.GetStore().Reload();
                //X.Msg.Show(new MessageBoxConfig
                //{
                //    Buttons = MessageBox.Button.OK,
                //    Icon = MessageBox.Icon.INFO,
                //    Title = "Success",
                //    Message = string.Format("{0}<br/>", "Archivo asignado a revisión")
                //});
            }
            catch (Exception ex)
            {
                RegistrarLog("wucCorreguirDoc.btnComentario_Click" + ex);
            }

        }
        private void SetConfigPanelDinamic(Ext.Net.Panel panel)
        {
            try
            {
                    SetCustomConfigWucAllAud(panel, CodeFase, ModuloSession, IdPageSession, ValorFaseOrAuditoriaId, ExpedienteId, ExpedienteAuditoriaId);
            }
            catch (Exception ex)
            {
                RegistrarLog("wucCorreguirDoc.SetConfigPanelDinamic" + ex);
            }
        }
        [DirectMethod (IDAlias = "WucCorregDocAud")]
        public void SelFillConfig(string idFind)
        {
            try
            {
                wucOtros objOts = (wucOtros)this.uc_ots_d002.UserControls[0];
                objOts.SetCustomConfig(CodeFase, ModuloSession, IdPageSession, ValorFaseOrAuditoriaId, ExpedienteId, ExpedienteAuditoriaId);
            }
            catch (Exception ex)
            {
                RegistrarLog("wucCorreguirDoc.SelFillConfig" + ex);
            }
        }
        /// <summary>
        /// Bind de comentarios de archivo
        /// </summary>
        /// <param name="action"></param>
        /// <param name="extraParams"></param>
        /// <returns></returns>
        [DirectMethod(IDAlias = "wucPlusCmt")]
        public ComentariosLista BindDataComentarios(string action, Dictionary<string, object> extraParams)
        {
            try
            {
                string queryPrm = extraParams.ContainsKey("idArchivo") ? extraParams["idArchivo"].ToString() : "";
                if (queryPrm != "")
                {
                    return ComentariosLista.GetComentariosLista(queryPrm);
                }
                return null;
            }
            catch (Exception ex)
            {
                RegistrarLog("wucOtros.BindDataAddArchivos" + ex);
            }
            return null;

        }
        protected void btnNotificarRegulado_Click(object sender, DirectEventArgs e)
        {
            try
            {
              
                string gridJson = e.ExtraParams["GridData"];
                Dictionary<string, string>[] gridData = JSON.Deserialize<Dictionary<string, string>[]>(gridJson);


                int i = 0;
                while (i < gridData.Length)
                {
                    var valuesGrid = gridData[i];                   
                    Archivo objArch    = Archivo.GetEditableRoot(Guid.Parse(valuesGrid["ArchivoId"]), ModuloSession);
                    objArch.SubirNuevo  = Valores.Codigo_CHAR_Si;
                    objArch.Comentarios = valuesGrid["ComentarioTecnico"];
                    objArch.Save();
                    DocumentoTecnico objDoc = DocumentoTecnico.GetEditableRoot(Guid.Parse(valuesGrid["Id"]));
                    objDoc.Procesado = Valores.Codigo_CHAR_Si;
                    objDoc.Estado = Valores.Codigo_CHAR_No;
                    objDoc.Save();
                    i += 1;

                }
                gpDocRevizar.GetStore().Reload();
           
                X.Msg.Show(new MessageBoxConfig
                {
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.INFO,
                    Title = "Información",
                    Message = string.Format("<br/><b>{0}</b>",Mensajes.MensajeNotificacionRegulado)
                });


            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        void EnviarMensagem(string texto)
        {
            try
            {
                        switch (ModuloSession)
                        {

                            case Valores.Modulo_Archivo_Aud_Cump:
                                FaseAuditoria audCump = FaseAuditoria.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                                audCump.Indicaciones = texto;
                                audCump.EstadoFase = Valores.Codigo_Estado_Fase_Reingreso;
                                audCump.Save();                         
                                break;
                            case Valores.Modulo_Archivo_Aud_Moni:
                                AuditoriaMonitoreo audMon = AuditoriaMonitoreo.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                                audMon.Indicaciones = texto;
                                audMon.EstadoFase = Valores.Codigo_Estado_Fase_Reingreso;
                                audMon.Save();                

                                break;
                            case Valores.Modulo_Archivo_Aud_Pma:
                                AuditoriaPMA audPMA = AuditoriaPMA.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                                audPMA.Indicaciones = texto;
                                audPMA.EstadoFase = Valores.Codigo_Estado_Fase_Reingreso;
                                audPMA.Save();
                               
                                break;
                            case Valores.Modulo_Archivo_Aud_Otros:
                                AuditoriaOtros audOtro = AuditoriaOtros.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                                audOtro.Indicaciones = texto;
                                audOtro.EstadoFase = Valores.Codigo_Estado_Fase_Reingreso;
                                audOtro.Save();

                                break;
                        }
             }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        protected void btnNotificarTecn_Click(object sender, DirectEventArgs e)
        {
            NotificarTecnico(e.ExtraParams["Indicaciones"],e.ExtraParams["GridData"]);
           
        }
        [DirectMethod(IDAlias = "WucCorregDocAud")]
        public void NotificarTecnico(string indicaciones,string gridJson)
        {
            try
            {
            EnviarMensagem(indicaciones);
            Dictionary<string, string>[] gridData = JSON.Deserialize<Dictionary<string, string>[]>(gridJson);
            int i = 0;
            while (i < gridData.Length)
            {
                var valuesGrid = gridData[i];
                Archivo objArch = Archivo.GetEditableRoot(Guid.Parse(valuesGrid["ArchivoId"]), ModuloSession);
                objArch.SubirNuevo = Valores.Codigo_CHAR_Anular;
                //objArch.Comentarios = valuesGrid["ComentarioTecnico"];
                objArch.Save();

                DocumentoTecnico objDoc = DocumentoTecnico.GetEditableRoot(Guid.Parse(valuesGrid["Id"]));
                objDoc.Procesado = Valores.Codigo_CHAR_Si;
                objDoc.Estado = Valores.Codigo_CHAR_No;
                objDoc.Save();
                i += 1;

            }
            gpDocRevizar.GetStore().Reload();

            X.Msg.Show(new MessageBoxConfig
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.INFO,
                Title = "Información",
                Message = string.Format("<br/><b>{0}</b>", Mensajes.MensajeNotificacionTecnico)
            });
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
     
    }
}